// 日志
const LOG = getLogger();

export function getLogger() {
    return console;             // 输出到控制台
    //return wx.logManager();   // 输出到日志文件
}

// 获取用户信息
export function getUserInfo() {
    let app = this;

    if (this.globalData.userInfo) {
        return this.globalData.userInfo;
    }

    // 获取用户信息
    wx.getSetting({
        success: res => {
            if (res.authSetting['scope.userInfo']) {
                // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
                wx.getUserInfo({
                    success: res => {
                        app.login(res.userInfo);
                    }
                })
            }
        }
    });

    return null;
}

// 登录
export function login(userBaseInfo, onResultLogin) {
    this.globalData.userInfo = userBaseInfo;
    this.onResultLogin = onResultLogin;

    // 登录到 eHomeCloud 云服务器
    if (!this.globalData.userInfo || !this.globalData.userInfo.openId) {
        this.loginEHomeCloud();
    } else {
        LOG.debug("已登录 eHomeCloud 云服务器，无需再次登录。");
        if (this.onResultLogin) {
            this.onResultLogin(this.globalData.userInfo);
        }
    }
}

// 登录到 eHomeCloud 云服务器
export function loginEHomeCloud() {
    let app = this;
    LOG.debug("登录到 eHomeCloud 云服务器...")

    wx.login({
        success: res => {
            // 发送 res.code 到后台换取 openId, sessionKey, unionId
            wx.request({
                url: 'https://ehome.szwistar.com/weixin/login?appId=' + app.globalData.appid
                    + '&code=' + res.code
                    + '&nickName=' + app.globalData.userInfo.nickName
                    + '&avatarUrl=' + app.globalData.userInfo.avatarUrl
                    + '&gender=' + app.globalData.userInfo.gender
                    + '&country=' + app.globalData.userInfo.country
                    + '&province=' + app.globalData.userInfo.province
                    + '&city=' + app.globalData.userInfo.city
                    + '&language=' + app.globalData.userInfo.language,
                data: {},
                method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
                success: function (res) {
                    app.globalData.userInfo.userId = res.data.userId;
                    app.globalData.userInfo.openId = res.data.openid;
                    app.globalData.userInfo.sessionKey = res.data.session_key;

                    if (app.onResultLogin) {
                        app.onResultLogin(app.globalData.userInfo);
                    }

                    // 连接到应用服务器
                    app.connectAppServer();
                }
            });
        },

        fail: res => {
            LOG.log("登录到 eHomeCloud 云服务器失败！", res);
        }
    })
}

// 连接到应用服务器
export function connectAppServer() {
    let app = this;

    app.skt = wx.connectSocket({
        url: 'wss://ehome.szwistar.com/webskt',

        success: function (res) {
            LOG.debug('WebSocket连接成功！');
        },

        fail: function (res) {
            app.skt = null;
            LOG.debug('WebSocket连接打开失败！' + res.errmsg)
        },
    });

    app.skt.onOpen(res => {
        let data = `hello from ${app.globalData.userInfo.nickName}(${app.globalData.userInfo.userId})(${app.globalData.userInfo.openId})`
        LOG.debug('WebSocket连接打开成功！发送消息到服务器: ' + data);
        app.skt.send({ data: data });
    });

    wx.onSocketMessage(res => {
        LOG.debug("onSocketMessage:", res);
    });
}

/**
 * 获取用户信息
 * 同步方法，取当前值，立即返回，不管有没有登录成功
 * @return
 */
export function getUserInfoSync() {
    return this.globalData.userInfo;
}

/**
 * 取当前用户昵称
 * 同步方法，取当前值，立即返回，不管有没有登录成功
 * @return String 用户昵称
 */
export function getUserNickNameSync() {
    if (this.globalData.userInfo) {
        return this.globalData.userInfo.nickName;
    }
    return null;
}

/**
 * 取当前用户头像
 * 同步方法，取当前值，立即返回，不管有没有登录成功
 * @return String 用户头像图片URL
 */
export function getUserAvatarUrlSync() {
    if (this.globalData.userInfo) {
        return this.globalData.userInfo.avatarUrl;
    }
    return null;
}

/**
 * 获取当前用户有权限的核心对象列表
 * @return 核对对象简明信息列表
 */
export function getAuthorizedResource() {
    return objs;
}

/**
 * 获取某个核心对象的详细信息
 */
export function getResourceDetail(bid, oid) {
    return obj;
}

/**
 * 调用核心对象的 API 接口
 * @param bid: int, 组织机构ID, 
 * @param oid: int, 核心对象ID,
 * @param action： String, 核心对象的方法和调用参数，语法应符合lua函数语法
 * @param resultCallback: function(res) {
 *      res.errcode: 0-表示OK；其它-表示错误码，错误信息在res.errmsg中
 *      res.msg: 当 errcode != 0 时有效，表示错误信息
 *      res.xxx: 当 errcode == 0 时有效，xxx表示返回数据的字段
 *  }
 * @return void
 */
export function objCall(bid, oid, action, res) {
}
